package com.zzyl.utils;

import java.time.*;
import java.time.format.DateTimeFormatter;

/**
 * 时间工具类
 */
public class DateTimeUtils {

    private static final ZoneId DEFAULT_ZONE = ZoneId.systemDefault();
    private static final DateTimeFormatter DEFAULT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * 时间戳转LocalDateTime（使用系统默认时区）
     */
    public static LocalDateTime timestampToLocalDateTime(Long timestamp) {
        if (timestamp == null) {
            return null;
        }
        return Instant.ofEpochMilli(timestamp)
                .atZone(DEFAULT_ZONE)
                .toLocalDateTime();
    }

    public static LocalDateTime timestampToDatetime(long timestamp) {
            // 将毫秒级时间戳转换为 Instant 对象
            Instant instant = Instant.ofEpochMilli(timestamp);
            // 转换为 LocalDateTime
            return instant.atZone(ZoneId.systemDefault()).toLocalDateTime();

    }

    /**
     * 时间戳转格式化字符串（默认格式：yyyy-MM-dd HH:mm:ss）
     */
    public static String timestampToString(Long timestamp) {
        return timestampToString(timestamp, DEFAULT_FORMATTER);
    }

    /**
     * 时间戳转格式化字符串（自定义格式）
     */
    public static String timestampToString(Long timestamp, String pattern) {
        if (timestamp == null) {
            return null;
        }
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return timestampToString(timestamp, formatter);
    }

    /**
     * 时间戳转格式化字符串（使用自定义格式化器）
     */
    public static String timestampToString(Long timestamp, DateTimeFormatter formatter) {
        if (timestamp == null || formatter == null) {
            return null;
        }
        LocalDateTime dateTime = timestampToLocalDateTime(timestamp);
        return dateTime.format(formatter);
    }

    /**
     * LocalDateTime转时间戳
     */
    public static Long localDateTimeToTimestamp(LocalDateTime dateTime) {
        if (dateTime == null) {
            return null;
        }
        return dateTime.atZone(DEFAULT_ZONE).toInstant().toEpochMilli();
    }

    /**
     * 字符串转LocalDateTime（默认格式：yyyy-MM-dd HH:mm:ss）
     */
    public static LocalDateTime stringToLocalDateTime(String dateTimeStr) {
        return stringToLocalDateTime(dateTimeStr, DEFAULT_FORMATTER);
    }

    /**
     * 字符串转LocalDateTime（自定义格式）
     */
    public static LocalDateTime stringToLocalDateTime(String dateTimeStr, String pattern) {
        if (dateTimeStr == null || pattern == null) {
            return null;
        }
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return LocalDateTime.parse(dateTimeStr, formatter);
    }

    /**
     * 字符串转LocalDateTime（使用自定义格式化器）
     */
    public static LocalDateTime stringToLocalDateTime(String dateTimeStr, DateTimeFormatter formatter) {
        if (dateTimeStr == null || formatter == null) {
            return null;
        }
        return LocalDateTime.parse(dateTimeStr, formatter);
    }

    /**
     * 获取当前时间戳
     */
    public static Long currentTimestamp() {
        return System.currentTimeMillis();
    }

    /**
     * 获取当前时间字符串（默认格式）
     */
    public static String currentTimeString() {
        return LocalDateTime.now().format(DEFAULT_FORMATTER);
    }

    /**
     * 获取当前时间字符串（自定义格式）
     */
    public static String currentTimeString(String pattern) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return LocalDateTime.now().format(formatter);
    }
}